import axios from 'axios'
import type { AxiosRequestConfig, AxiosResponse } from 'axios'

export interface ResponseData<T = unknown> {
    code: number
    msg: string
    data?: T
    traceid: string
}

if (import.meta.env.VITE_API_URL) {
    axios.defaults.baseURL = import.meta.env.VITE_API_URL
}
axios.defaults.headers.common = {
    'Content-Type': import.meta.env.MODE === 'production' ? 'text/plain' : 'application/json'
}

axios.interceptors.request.use(
    (config: AxiosRequestConfig) => {
        // 在请求发送前可以对请求进行处理，比如添加 token
        // config.headers['Authorization'] = 'Bearer ' + token
        return config
    },
    (err) => {
        return Promise.reject(err)
    }
)

axios.interceptors.response.use(
    (response: AxiosResponse<ResponseData>) => {
        // 在收到响应后可以对响应进行处理，比如根据状态码判断是否成功
        // 比如解码...
        const ret = response.data
        if (ret.code === 0) {
            return ret
        } else {
            return Promise.reject(new Error(ret.msg))
        }
    },
    (err) => {
        return Promise.reject(err)
    }
)
